package com.itcam.phaseiii.iostream_;

import java.io.*;

/**
 * Author:Cammy.Wu
 * Date:2024-05-13
 * Description:处理流（缓冲字节流）BufferedInputStream BufferedOutputStream
 */

public class DisposeStreamDemo01 {
    public static void main(String[] args) throws IOException {
        // 1.创建图片文件
        File f1 = new File("E:\\IOstream\\jubao.jpg");
        // 2.目标图片
        File f2 = new File("E:\\IOstream\\_jubao__.jpg");
        // 3.输入管道对到源图片
        FileInputStream fis = new FileInputStream(f1);
        // 4.输出管道对到目标图片
        FileOutputStream fos = new FileOutputStream(f2);
        // 5.功能加强，在FileInputStream外面套一个管：BufferedInputStream
        BufferedInputStream bis = new BufferedInputStream(fis);
        // 6.功能加强，在FileOutputStream外面套一个管：BufferedOutputStream
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // 7.开始动作
        long starTime = System.currentTimeMillis();
        byte[] bytes = new byte[1024 * 6];
        int len = bis.read(bytes);
        while (len != -1) {
            bos.write(bytes, 0, len);
            /*bos.flush(); 底层已经做了刷新缓冲区的操作
             *   底层源码是：flushBuffer();
             * */
            len = bis.read(bytes);
        }
        long endTime = System.currentTimeMillis();
        System.out.println(endTime - starTime + "ms");
        // 8.关闭流
        // 如果处理流包裹着节点流，只要关闭高级流即可，被包裹的流也会随之被关闭
        bos.close();
        bis.close();
//        fos.close();
//        fis.close();
    }
}
